﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace 物流管理系统
{
    public partial class Startinfo : Form
    {
        DBOperation dboperation = new DBOperation();
        public int formtype;
        public int changetype;
        ReMatch re = new ReMatch();
        public Startinfo()
        {
            InitializeComponent();
        }

        private void confirm_Click(object sender, EventArgs e)
        {

            foreach (Control c in Controls)
            {
                if (c is TextBox txt)
                {
                    if (txt.Text==""&&(!c.Name.Equals("remarkstext")))
                    {
                        MessageBox.Show("有重要项目为空，请检查！！！", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                }
            }
            if (!re.idmatch(idtext.Text))
            {
                MessageBox.Show("编号输入非法！！！\n格式为英文和数字组成的5-15位字符串。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            switch (formtype)
            {
                case 0://添加
                    {

                        if (dboperation.exists("select "+idlabel.Text+" from 发车信息表 where "+idlabel.Text+"='"+idtext.Text+"'", idtext.Text))
                        {
                            MessageBox.Show("此编号已经存在！！！", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            return;
                        }
                        else
                        {
                            dboperation.nonquerysql("insert into 发车信息表 VALUES('"+idtext.Text+"','"+caridcombobox.Text+"','"+startdatepicker.Value+"','"+getcheckbox(arrivecheckbox)+"',null,'"+getcheckbox(returncheckbox)+"',null);");

                        }
                        //更新
                        dboperation.nonquerysql("update 车辆信息表 set 可用='0' where 车牌号='"+caridcombobox.Text+"';");
                        dboperation.nonquerysql("update 托运信息表 set 托运状态='已发车',备注=concat(备注,'"+DateTime.Now.ToString()+"：发车；') where 托运编号 in (select 托运编号 from 装车信息表 where 车牌号='"+caridcombobox.Text+"');");
                        dboperation.nonquerysql("update 驾驶员信息表 set 空闲='0' where 驾驶员编号=(select 驾驶员编号 from 车辆信息表 where 车牌号='"+caridcombobox.Text+"')");
                        break;
                    }
                case 1://修改
                    {
                        switch (changetype)
                        {
                            case 0://全修改
                                {
                                    if ((!arrivecheckbox.Checked)&&(!returncheckbox.Checked))
                                    {
                                        dboperation.nonquerysql("replace into 发车信息表 VALUES('"+idtext.Text+"','"+caridcombobox.Text+"','"+startdatepicker.Value+"','"+getcheckbox(arrivecheckbox)+"',null,'"+getcheckbox(returncheckbox)+"',null);");
                                        //更新
                                        dboperation.nonquerysql("update 车辆信息表 set 装货='1',可用='0' where 车牌号='"+caridcombobox.Text+"'");
                                        dboperation.nonquerysql("update 托运信息表 set 托运状态='已发车' where 托运编号 in (select 托运编号 from 装车信息表 where 车牌号='"+caridcombobox.Text+"');");
                                    }
                                    else if (arrivecheckbox.Checked&&(!returncheckbox.Checked))
                                    {
                                        dboperation.nonquerysql("replace into 发车信息表 VALUES('"+idtext.Text+"','"+caridcombobox.Text+"','"+startdatepicker.Value+"','"+getcheckbox(arrivecheckbox)+"','"+arrivedatepicker.Value+"','"+getcheckbox(returncheckbox)+"',null);");
                                        //更新
                                        dboperation.nonquerysql("update 车辆信息表 set 装货='0',可用='0' where 车牌号='"+caridcombobox.Text+"'");
                                        dboperation.nonquerysql("update 托运信息表 set 托运状态='已到达' where 托运编号 in (select 托运编号 from 装车信息表 where 车牌号='"+caridcombobox.Text+"');");
                                    }
                                    else if ((!arrivecheckbox.Checked)&&returncheckbox.Checked)
                                    {
                                        MessageBox.Show("必须确认到达后才能返回！！！", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        return;
                                    }
                                    else if (arrivecheckbox.Checked&&returncheckbox.Checked)
                                    {
                                        dboperation.nonquerysql("replace into 发车信息表 VALUES('"+idtext.Text+"','"+caridcombobox.Text+"','"+startdatepicker.Value+"','"+getcheckbox(arrivecheckbox)+"','"+arrivedatepicker.Value+"','"+getcheckbox(returncheckbox)+"','"+returndatepicker.Value+"');");
                                        //更新
                                        dboperation.nonquerysql("update 车辆信息表 set 装货='0',可用='1' where 车牌号='"+caridcombobox.Text+"'");
                                    }
                                    break;
                                }
                            case 1://到达登记
                                {
                                    if (!arrivecheckbox.Checked)
                                    {
                                        MessageBox.Show("请勾选已经到达！！！", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        return;
                                    }
                                    dboperation.nonquerysql("replace into 发车信息表 VALUES('"+idtext.Text+"','"+caridcombobox.Text+"','"+startdatepicker.Value+"','"+getcheckbox(arrivecheckbox)+"','"+arrivedatepicker.Value+"','"+getcheckbox(returncheckbox)+"',null);");
                                    //更新
                                    dboperation.nonquerysql("update 车辆信息表 set 装货='0' where 车牌号='"+caridcombobox.Text+"'");
                                    dboperation.nonquerysql("update 托运信息表 set 托运状态='已到达',备注=concat(备注,'"+DateTime.Now.ToString()+"：到达；') where 托运编号 in (select 托运编号 from 装车信息表 where 车牌号='"+caridcombobox.Text+"');");
                                    break;
                                }
                            case 2://返回登记
                                {
                                    if (!returncheckbox.Checked)
                                    {
                                        MessageBox.Show("请勾选已经返回！！！", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        return;
                                    }
                                    dboperation.nonquerysql("replace into 发车信息表 VALUES('"+idtext.Text+"','"+caridcombobox.Text+"','"+startdatepicker.Value+"','"+getcheckbox(arrivecheckbox)+"','"+arrivedatepicker.Value+"','"+getcheckbox(returncheckbox)+"','"+returndatepicker.Value+"');");
                                    //更新
                                    dboperation.nonquerysql("update 车辆信息表 set 可用='1' where 车牌号='"+caridcombobox.Text+"'");
                                    dboperation.nonquerysql("update 驾驶员信息表 set 空闲='1' where 驾驶员编号=(select 驾驶员编号 from 车辆信息表 where 车牌号='"+caridcombobox.Text+"')");
                                    break;
                                }
                        }
                        break;
                    }
                case 2://查看
                    {
                        Close();
                        break;
                    }
            }
            Close();
        }
        private string getcheckbox(CheckBox checkBox)
        {
            if (checkBox.Checked)
            {
                return "1";
            }
            else
            {
                return "0";
            }
        }
        private void setcombobox(ComboBox box, List<string> list) => box.DataSource = list;
        private void Startregisterform_Load(object sender, EventArgs e)
        {
            switch (formtype)
            {
                case 0://添加
                    {
                        Text="发车登记";
                        List<string> caridlist = dboperation.querylist("select 车牌号 from 车辆信息表 where 装货='1'and 可用='1'");
                        setcombobox(caridcombobox, caridlist);
                        changetypemenu.Enabled = false;
                        arrivedatepicker.Enabled = false;
                        returndatepicker.Enabled=false;
                        arrivecheckbox.Enabled=false;
                        returncheckbox.Enabled=false;
                        break;
                    }
                case 1://修改
                    {
                        idtext.Enabled = false;
                        changetype=0;
                        break;
                    }
                case 2://查看
                    {
                        foreach (Control c in Controls)
                        {
                            if (!(c is Button))
                            {
                                c.Enabled=false;
                            }
                        }
                        break;
                    }
            }

        }

        private void 修改ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            changetype=0;
            Text="发车信息";
            foreach (Control c in Controls)
            {
                c.Enabled = true;
            }
            idtext.Enabled = false;
        }

        private void 到达登记ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            changetype=1;
            Text="到达登记";
            idtext.Enabled=false;
            caridcombobox.Enabled=false;
            startdatepicker.Enabled=false;
            arrivecheckbox.Enabled=true;
            arrivedatepicker.Enabled = true;
            returncheckbox.Enabled=false;
            returndatepicker.Enabled=false;
        }

        private void 返回登记ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            changetype =2;
            Text="返回登记";
            idtext.Enabled=false;
            caridcombobox.Enabled=false;
            startdatepicker.Enabled=false;
            arrivecheckbox.Enabled=false;
            arrivedatepicker.Enabled = false;
            returncheckbox.Enabled=true;
            returndatepicker.Enabled=true;
        }

        private void 添加中转信息ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Transferinfo transferinfo = new Transferinfo();
            transferinfo.carid = caridcombobox.Text;
            transferinfo.ShowDialog();
        }
    }
}
